Skip to content

Conversation

estebank
Copy link
Contributor

@estebank estebank commented Sep 23, 2023

Detect that we can't suggest self. in an associated function without &self receiver.

Partially address #115992.

r? @compiler-errors

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Sep 23, 2023
Copy link
Member

@compiler-errors compiler-errors left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This still doesn't give good suggestions for a resolver error w/ associated_fn_name without (), right? If so, pls file a follow-up bug. r=me

@rust-log-analyzer

This comment has been minimized.

@compiler-errors
Copy link
Member

Also, this doesn't fix the other half of #115992, which is that struct shorthand syntax gets mangled by suggestion in resolution, right? Should probably not close that issue if so.

@compiler-errors
Copy link
Member

compiler-errors commented Sep 23, 2023

Would actually be nice if you committed the test in #115992 so I could see the answer to those two questions, even if those suggestions are still kinda busted. Could be marked w/ // known-bug or a FIXME or whatever if so.

@estebank
Copy link
Contributor Author

The output for the two cases is

error[E0425]: cannot find value `field` in this scope
  --> f73.rs:11:9
   |
6  |     fn field(&self) -> u32 {
   |        ----- a method by that name is available on `Self` here
...
11 |         field;
   |         ^^^^^ a field by this name exists in `Self`

error[E0425]: cannot find value `field` in this scope
  --> f73.rs:12:15
   |
6  |     fn field(&self) -> u32 {
   |        ----- a method by that name is available on `Self` here
...
12 |         Foo { field }
   |               ^^^^^ a field by this name exists in `Self`

Having the field and method named the same does add the somewhat misleading span though :-/

We could improve the situation by carrying more data in the diagnostic struct to mention more than one bit context, as we do now.

I'll add the test.

@estebank
Copy link
Contributor Author

Oh boy, that's fun

error[E0425]: cannot find value `field` in this scope
  --> tests/ui/resolve/field-and-method-in-self-not-available-in-assoc-fn.rs:16:15
   |
16 |         Foo { field } //~ ERROR cannot find value `field` in this scope
   |               ^^^^^
   |
help: consider using the method on `Self`
   |
16 |         Foo { self.field } //~ ERROR cannot find value `field` in this scope
   |               +++++
help: you might have meant to use the available field
   |
16 |         Foo { self.field } //~ ERROR cannot find value `field` in this scope
   |               ~~~~~~~~~~

@estebank
Copy link
Contributor Author

I'll address the "keep info on struct literal around" later, I know where to fix it but will likely take me longer than tonight.

@estebank
Copy link
Contributor Author

@bors r=compiler-errors

@bors
Copy link
Collaborator

bors commented Sep 23, 2023

📌 Commit 7d8559a has been approved by compiler-errors

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 23, 2023
@compiler-errors
Copy link
Member

@bors rollup

matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Sep 23, 2023
…errors

More accurate suggestion for `self.` and `Self::`

Detect that we can't suggest `self.` in an associated function without `&self` receiver.

Partially address rust-lang#115992.

r? `@compiler-errors`
bors added a commit to rust-lang-ci/rust that referenced this pull request Sep 24, 2023
…iaskrgr

Rollup of 5 pull requests

Successful merges:

 - rust-lang#116073 (Allow higher-ranked fn sigs in `ValuePairs`)
 - rust-lang#116082 (Tweak expected message to explain what it's actually signifying)
 - rust-lang#116086 (More accurate suggestion for `self.` and `Self::`)
 - rust-lang#116104 (Reuse calculate_debuginfo_offset for fragments.)
 - rust-lang#116106 (Migrate GUI colors test to original CSS color format)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit 61b38b2 into rust-lang:master Sep 24, 2023
@rustbot rustbot added this to the 1.74.0 milestone Sep 24, 2023
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Sep 24, 2023
Rollup merge of rust-lang#116086 - estebank:issue-115992, r=compiler-errors

More accurate suggestion for `self.` and `Self::`

Detect that we can't suggest `self.` in an associated function without `&self` receiver.

Partially address rust-lang#115992.

r? ``@compiler-errors``
bors added a commit to rust-lang-ci/rust that referenced this pull request Sep 29, 2023
…errors

When suggesting `self.x` for `S { x }`, use `S { x: self.x }`

Fix rust-lang#115992.

r? `@compiler-errors`

Follow up to rust-lang#116086.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants